/* Copyright (c) 2009, Michael Patraw
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *     * Redistributions of source code must retain the above copyright
 *       notice, this list of conditions and the following disclaimer.
 *     * Redistributions in binary form must reproduce the above copyright
 *       notice, this list of conditions and the following disclaimer in the
 *       documentation and/or other materials provided with the distribution.
 *     * The name of Michael Patraw may not be used to endorse or promote
 *       products derived from this software without specific prior written
 *       permission.
 *
 * THIS SOFTWARE IS PROVIDED BY Michael Patraw ''AS IS'' AND ANY
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL Michael Patraw BE LIABLE FOR ANY
 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
#include "load.h"

#include "board.h"

int BOARD_WIDTH = BOARD_MAX_WIDTH;
int BOARD_HEIGHT = BOARD_MAX_HEIGHT;

int WALL_TILE = '#';
AtColor WALL_COLOR = {128, 128, 128};
int OBJECT_TILE = 'O';
AtColor OBJECT_COLOR = {255, 255, 255};
int IMM_OBJECT_TILE = 'X';
AtColor IMM_OBJECT_COLOR = {255, 0, 0};
int FLOOR_TILE = '.';
AtColor FLOOR_COLOR = {128, 128, 128};

int PLAYER_TILE = '@';

void Load_CustomIcons(void)
{
    char object[AT_CHAR_HEIGHT][AT_CHAR_WIDTH] = {
        {0, 0, 0, 0, 0, 0},
        {0, 0, 0, 0, 0, 0},
        {0, 0, 0, 0, 0, 0},
        {0, 0, 1, 1, 1, 1},
        {0, 1, 0, 0, 0, 1},
        {1, 0, 0, 0, 1, 1},
        {1, 1, 1, 1, 0, 1},
        {1, 0, 0, 1, 0, 1},
        {1, 0, 0, 1, 0, 1},
        {1, 0, 0, 1, 1, 0},
        {1, 1, 1, 1, 0, 0},
        {0, 0, 0, 0, 0, 0},
        {0, 0, 0, 0, 0, 0}
    };

    char wall[AT_CHAR_HEIGHT][AT_CHAR_WIDTH] = {
        {1, 0, 0, 0, 0, 1},
        {0, 1, 1, 1, 1, 0},
        {0, 1, 0, 0, 1, 0},
        {0, 1, 0, 0, 1, 0},
        {0, 1, 0, 0, 1, 0},
        {0, 1, 0, 0, 1, 0},
        {0, 1, 0, 0, 1, 0},
        {0, 1, 0, 0, 1, 0},
        {0, 1, 0, 0, 1, 0},
        {0, 1, 0, 0, 1, 0},
        {0, 1, 0, 0, 1, 0},
        {0, 1, 1, 1, 1, 0},
        {1, 0, 0, 0, 0, 1}
    };
    /*
    char player[AT_CHAR_HEIGHT][AT_CHAR_WIDTH] = {
        {0, 0, 0, 0, 0, 0},
        {0, 0, 0, 0, 0, 0},
        {0, 0, 1, 1, 0, 0},
        {0, 1, 0, 0, 1, 0},
        {1, 0, 1, 1, 0, 1},
        {1, 0, 0, 0, 0, 1},
        {1, 0, 0, 0, 0, 1},
        {1, 0, 0, 0, 0, 1},
        {1, 0, 1, 1, 0, 1},
        {0, 0, 1, 1, 0, 0},
        {0, 0, 1, 1, 0, 0},
        {0, 0, 0, 0, 0, 0},
        {0, 0, 0, 0, 0, 0}
    };
    */
    char player[AT_CHAR_HEIGHT][AT_CHAR_WIDTH] = {
        {0, 0, 0, 0, 0, 0},
        {0, 0, 1, 1, 0, 0},
        {0, 0, 1, 1, 0, 0},
        {1, 1, 0, 0, 1, 1},
        {1, 0, 0, 0, 0, 1},
        {1, 0, 1, 1, 0, 1},
        {1, 0, 0, 0, 0, 1},
        {0, 0, 1, 1, 0, 0},
        {0, 1, 0, 0, 1, 0},
        {0, 1, 0, 0, 1, 0},
        {0, 1, 0, 0, 1, 0},
        {0, 0, 0, 0, 0, 0},
        {0, 0, 0, 0, 0, 0}
    };

    char floor[AT_CHAR_HEIGHT][AT_CHAR_WIDTH] = {
        {0, 0, 0, 0, 0, 0},
        {0, 0, 0, 0, 0, 0},
        {0, 0, 0, 0, 0, 0},
        {0, 0, 0, 0, 0, 0},
        {0, 0, 0, 0, 0, 0},
        {0, 0, 0, 0, 0, 0},
        {0, 0, 0, 0, 0, 0},
        {0, 0, 0, 0, 0, 0},
        {0, 0, 0, 0, 0, 0},
        {0, 0, 0, 0, 0, 0},
        {0, 0, 1, 1, 0, 0},
        {0, 0, 0, 0, 0, 0},
        {0, 0, 0, 0, 0, 0}
    };

    atCharSet(501, object);
    atCharSet(502, wall);
    atCharSet(503, player);
    atCharSet(504, floor);

    WALL_TILE = 502;
    OBJECT_TILE = 501;
    IMM_OBJECT_TILE = 501;
    FLOOR_TILE = 504;
    PLAYER_TILE = 503;
}

void Load_SetBoardDimensions(int w, int h)
{
    if (w >= 5 && w < BOARD_MAX_WIDTH) {
        BOARD_WIDTH = w;
    }
    else if (w == -1) {
        BOARD_WIDTH = BOARD_MAX_WIDTH;
    }

    if (h >= 5 && h < BOARD_MAX_HEIGHT) {
        BOARD_HEIGHT = h;
    }
    else  if (h == -1) {
        BOARD_HEIGHT= BOARD_MAX_HEIGHT;
    }
}
